﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Collections.ObjectModel;
using Data = DeltaFlex.Data;
using Taula = DeltaFlex.Negoci.ConsTaules.Usuari;

namespace DeltaFlex.Negoci
{
    /// <summary>
    /// Definició dels atributs i dels mètdes d'accés a BD de l'objecte Usuari
    /// </summary>
    [Serializable()]
    public class Usuari
    {
        /// <summary>
        /// Definició de les variables globals de l'objecte Usuari
        /// </summary>
        #region Variables
        private int _idUsuari;
        private string _login;
        private string _password;
        private string _dni;
        private DateTime _dataAlta;
        private DateTime? _dataDarrerAcces;
        private string _observacions;
        private string _rolUsuari;
        #endregion

        /// <summary>
        /// Definició dels atributs de l'objecte
        /// </summary>
        #region Atributs
        public int IdUsuari
        {
            get { return _idUsuari; }
        }
        public string Login
        {
            get { return _login; }
            set { _login = value; }
        }
        public string Password
        {
            get { return _password; }
            set { _password = value; }
        }
        public string Dni
        {
            get { return _dni; }
            set { _dni = value; }
        }
        public DateTime DataAlta
        {
            get { return _dataAlta; }
            set { _dataAlta = value; }
        }
        public DateTime? DataDarrerAcces
        {
            get { return _dataDarrerAcces; }
            set { _dataDarrerAcces = value; }
        }
        public string Observacions
        {
            get { return _observacions; }
            set { _observacions = value; }
        }
        public string RolUsuari
        {
            get { return _rolUsuari; }
            set { _rolUsuari = value; }
        }
        #endregion

        #region Selects
        public static Usuari UsuariByDNI(string dni)
        {
            Usuari usuari = null;
            IDataReader reader = null;

            try
            {
                reader = Data.Usuari.CercarRolUsuariByDNI(dni);

                if (reader.Read())
                {
                   usuari = MapEntityFromDataReader(reader);
                }
            }
            catch { throw; }
            finally
            {
                if (reader != null) reader.Close();
            }
            
            return usuari;
        }
        #endregion

        #region Updates
        public static void ActualitzaDarrerAccesUsuari(int idUsuari)
        {
            Data.Usuari.ActualitzaDarrerAccesUsuari(idUsuari);
        }
        #endregion

        /// <summary>
        /// Mapeig de l'objecte Usuari. 
        /// </summary>
        /// <param name="record">Resultat de select a Base de Dades sobre l'objecte Usuari</param>
        /// <returns>Retorna l'objecte mapejat a la classe</returns>
        #region Mapeig
        public static Usuari MapEntityFromDataReader(IDataReader record)
        {
            Usuari usu = new Usuari();

            MemberAllocation.Allocate(record, Taula.COLUMNA_IDUSUARI, ref usu._idUsuari);
            MemberAllocation.Allocate(record, Taula.COLUMNA_LOGINUSUARI, ref usu._login);
            MemberAllocation.Allocate(record, Taula.COLUMNA_PASSWORDUSUARI, ref usu._password);
            MemberAllocation.Allocate(record, Taula.COLUMNA_DNIUSUARI, ref usu._dni);
            MemberAllocation.Allocate(record, Taula.COLUMNA_DATAALTAUSUARI, ref usu._dataAlta);
            MemberAllocation.Allocate(record, Taula.COLUMNA_DATADARRERACCES, ref usu._dataDarrerAcces);
            MemberAllocation.Allocate(record, Taula.COLUMNA_OBSERVACIONSUSU, ref usu._observacions);
            MemberAllocation.Allocate(record, Taula.COLUMNA_ROLUSUARI, ref usu._rolUsuari);

            return usu;
        }
        #endregion
        
    }
}
